package org.vic.command.after;

import org.vic.command.before.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by VIC.Huang on 2016/9/8.
 */
public class ProductManage {
    private static final int TASK_NUMBER_PER_DAY = 4;   // 一天最多分配四个任务，剩下的推到明天

    private List<Task> taskList;

    private List<Programmer> programmerList;    //产品经理认识所有程序员
    private int currentIndex;   // 记录当前指定程序员索引

    public ProductManage(Programmer... programmers) {
        if(programmers == null || programmers.length == 0) {
            throw new RuntimeException("产品经理手下没有程序员，任务分配不出去，无法正常工作！");
        }
        taskList = new ArrayList<Task>();
        programmerList = Arrays.asList(programmers);
    }

    //接受一个任务
    public void receive(Task task) {
        taskList.add(task);
    }

    //产品经理可以选择程序员，简单的循环选取
    public Programmer chooseProgrammer() {
        return programmerList.get(currentIndex == programmerList.size() ? 0 : currentIndex++);
    }

    //分配给程序员任务，督促程序员完成
    public void assign() {
        Task[] copy =   // 用于保存超出四个的任务
                new Task[taskList.size() > TASK_NUMBER_PER_DAY ? taskList.size() - TASK_NUMBER_PER_DAY : 0];
        for(int i=0; i<TASK_NUMBER_PER_DAY && i<taskList.size(); i++) {
            taskList.get(i).handle();
        }
        // 将剩余的任务复制到Copy数组中
        System.arraycopy(
                taskList.toArray(),
                TASK_NUMBER_PER_DAY > taskList.size() ? taskList.size() : 0,
                copy,
                0,
                copy.length);
        taskList = Arrays.asList(copy);
    }

    //打印剩下的任务
    public void printTaskList() {
        if(taskList == null || taskList.size() == 0) {
            System.out.println("------当前无任务-----");
            return;
        }
        System.out.println("--------当前剩下的任务列表--------");
        for(Task task : taskList) {
            System.out.println(task);
        }
        System.out.println("--------------------------------");
    }
}
